|
Date : 15 d�cembre 1990 Programme : HEAVY METAL Protection : Mot de passe Fichier : METAL.EXE Outils : PERISCOPE, Carte PANO, QUAID ANALYSER. Temps pass� : 2h Divers : PERISCOPE charg� � 1979:0000 Soci�t� : Origine : INDONESIE Num�ro : 045 Programme d�plomb� � moiti�, c'est � dire que l'on peut y jouer sans indiquer de mot de passe mais l'affichage des scores ne se fait pas en fin de partie, seulement dans la partie en cours. Et �galement la pr�sentation est shunt�e, mais �a c'est un moindre mal. Il faut noter toutefois que si l'on rentre le bon mot de passe le programme fonctionne toujours... A la demande du mot de passe se placer successivement sur l'INT21 et l'INT16 pour voir si l'une des deux est utilis�e pour l'entr� des caract�res. OK c'est l'INT16. Taper G {SS:SP} pour se trouver � la sortie puis faire une recherche de test de la touche ENTER dans le SEGMENT courant; S CS:0 FFFF 3C 0D. ---> 3C 0D = CMP AL,0D Trois endroits apparaissent: 34B3:091B 34B3:2501 34B3:2BF7 En se pla�ant sur le premier, il s'av�re que c'est le bon. Le suivre jusqu'� se que l'on arrive au saut list� ci-dessous et inverser le saut. 34B3:0782 7518 JNZ 079C ; jump 34B3:0784 C706AC5D0000 MOV WORD PTR [5DAC],0000 34B3:078A E833FC CALL 03C0 34B3:078D 833EDE1104 CMP WORD PTR [11DE],+04 34B3:0792 7407 JZ 079B 34B3:0794 8E06CD11 MOV ES,[11CD] 34B3:0798 E801FC CALL 039C 34B3:079B C3 RET C'est tout bon, CTRL ALT DEL pour sortir rapidement et lancer PCTOOLS pour figer la modification. Et l� surprise ( mais cel� ne m'�tonne qu'� moiti� ) la chaine est introuvable dans METAL.EXE et il n'y a pas d'OVL. A tout hazard je recherche tout le r�pertoire, sans r�sultat. Je lance QUAID pour avoir confirmation ; effectivement METAL.EXE ne se sert d'aucun overlay ni d'un fichier quelconque � cet endroit l�. "Ils" sont plus rus�s que je ne le pensait, cette partie de code est lu quelque part et plac�e l� une fois le programme ayant d�marr�. Si on ne trouve pas la chaine d'octets c'est qu'elle est soit dispers�e sur le disque ou cod�e par un OU EXCLUSIF. Ce sont les deux m�thodes les plus employ�es. Voir 35MM.DEP et RF.DEP Probl�me: comment rep�rer l'endroit d'ou sont tir�s les octets ? PERISCOPE offre des commandes pour s'arr�ter lorsqu'une position d�termin� est lu ou �crite. Mais ce dernier ne s'arr�te pas toujours. C'est le moment de tester l'arret sur adresse en �criture de ma carte PANO. Je place donc CS:IP � 34B3:0782 ( adresse paire; c'est magnifique ) et le switch READ/WRITE sur WRITE. Je lance et... l'�cran de PERISCOPE s'affiche d�s le d�but du programme bien avant la demande du type de moniteur. Je me retrouve dans la boucle ci-dessous: Et par simple curiosit� je vais voir en 34B3:0782; tout ce qui est avant 782 correspond au code et tout ce qui suit est n'importe quoi. A partir de l� je fais du pas � pas, et lorsque je vois mon 75 arriver avec l'instruction LODSW je sais que c'est gagn�. Il suffit de faire un DUMP de la chaine pointer par LODSW pour trouver l'endroit ou est stock� 75. 9CB0:0350 D1E8 SHR AX,1 9CB0:0352 D1E8 SHR AX,1 9CB0:0354 D1E8 SHR AX,1 9CB0:0356 D1E8 SHR AX,1 9CB0:0358 46 INC SI 9CB0:0359 BA5E03 MOV DX,035E 9CB0:035C EB09 JMP 0367 9CB0:035E AD LODSW 9CB0:035F 86E0 XCHG AL,AH 9CB0:0361 80E40F AND AH,0F 9CB0:0364 BA4C03 MOV DX,034C 9CB0:0367 3D0001 CMP AX,0100 Je m'interresse donc particuli�rement au deux octets 75 et 18 JNZ 79C que je voudrait remplacer par deux NOP. En fait il suffit de faire un saut avec un d�placement �gale � ZERO pour avoir le m�me r�sultat. Donc transformer l'octet 18 en 00. JNZ 784 ( 79Ch - 18h = 784h ) Je continue mon pas � pas pour attendre le passage du 18. Celui-ci viens de DS:0C97. DS=8C84. Methode pratique, chercher la chaine 40181E71B60330FC54 et changer 18 par 00. FREDDY |